This report primarily concentrate on reviewing overwatch heroes and how they are/should be used.
Player data is parsed from *https://overwatchtracker.com*. Player list is parsed on August 4, 2016 and each player’s competitive play data is parsed on August 7, 2016. Each player’s data is dynamically loaded at runtime, hence prone to errors. Especially, there were zero-valued data where data cannot be zero, such as player level. Some data may have been manually deleted during parsing. Web crawler is developed with python3, and can be viewed at https://github.com/juice500ml/think_overwatch/tree/master/parse_tracker.
Overwatch is a multiplayer first-person shooter video game developed and published by Blizzard Entertainment. It was released in May 2016 for Microsoft Windows, PlayStation 4, and Xbox One.
Overwatch puts players into two teams of six, with each player selecting one of several pre-defined hero characters with unique movement, attributes, and skills; these heroes are divided into four classes: Offense, Defense, Tank, and Support. Players on a team work together to secure and defend control points on a map and/or escort a payload across the map in a limited amount of time. The game was launched with casual play, while Blizzard added competitive ranked play about a month after launch. Copied on August 15, 2016
Image from https://playoverwatch.com/en-us/heroes/#all*
Copied on August 15, 2016*
There are 4 hero classes in Overwatch; each role sufficient for victory.
Role summary from http://overwatch.wikia.com/wiki/Role*
Copied on August 15, 2016*
The main objective of the offense role is to scout the area, harass the opposing team, and press the objective. Heroes classified as offense generally have high damage weapons and abilities and lower health pools than tanks and some defense heroes. They are usually excellent duelists with high mobility and good burst or sustained damage. The following heroes have this role: McCree, Pharah, Reaper, Soldier: 76, Tracer and Genji.
The main objective of the defense role is to guard locations, create choke points, and establish a front. They may have long range weapons or the ability to create turrets, and excel at area denial.
The following heroes have this role: Bastion, Hanzo, Junkrat, Torbjörn, Widowmaker and Mei.
The main objective of the defense role is to guard locations, create choke points, and establish a front. They may have long range weapons or the ability to create turrets, and excel at area denial.
The following heroes have this role: Reinhardt, Roadhog, Winston, Zarya and D.Va.
The objective of support is to heal, buff and provide utility. Support heroes boost the overall performance of their team by increasing their survivability, speed, and damage output. They are generally the worst duelists and are best when surrounded by teammates.
The following heroes have this role: Zenyatta, Mercy, Symmetra, Lúcio and Ana.
Ratings vary from 0 to near 90. If the player wins at competitive play, rating of the player goes up, and vice versa. It gets harder to increase rating when rating is higher, and easier when rating is lower. Tracked Players at *https://overwatchtracker.com* on August 7, 2016 were 47,267. And rating distribution as below.
dat %>%
ggplot(aes(x=RATING)) +
ggtitle('Overwatch Rating Counts') +
geom_histogram(bins=30)
qqnorm(dat$RATING)
qqline(dat$RATING)
As we can more clearly see in the Q-Q plot, Overwatch rating closely follows normal distribution; presumably distributed manually by Blizzard itself.
Game matching for competitive play can be shown in a roundabout way; by showing total kils per total deaths while playing competitive match. Note that total kills/deaths has the same ratio of average kills/deaths per game.
set.seed(1608)
dat %>%
sample_n(1000) %>%
ggplot(aes(x=TOT_KILL, y=TOT_DEATH)) +
geom_jitter() +
geom_smooth() +
scale_x_log10() +
scale_y_log10() +
geom_abline() +
ggtitle("Total Kills per Death")
cor(dat$TOT_KILL, dat$TOT_DEATH)
## [1] 0.9401023
The bias betwen kills and deaths is primarily because Support heroes tends to die a lot, and not so many people play Support heroes.
1st Pick Heroes are chosen solely by player’s total play time of the correspoding hero. Note that hero popularity can be biased as considerable amount of players tend to choose between multiple heroes, and this data ignored each player’s playable spare heroes.
dat %>%
group_by(BEST_HERO) %>%
mutate(count=n()) %>%
ggplot(aes(x=reorder(BEST_HERO, count, y=count))) +
ggtitle('Overwatch Heroes') +
geom_bar() +
coord_flip() +
xlab("Hero Chosen") +
ylab("Number of People")
dat %>%
filter(BEST_HERO %in% hero_atk) %>%
ggplot(aes(x=RATING, fill=BEST_HERO)) +
geom_density(position = "fill") +
xlim(20, 80) +
ggtitle("Offense Heroes 1st Pick")
## Warning: Removed 131 rows containing non-finite values (stat_density).
Offense heroes are mainly chosen evenly, but Tracer is mostly chosen in the lowest tiers, but as ratings go up, McCree is the most chosen pick.
dat %>%
filter(BEST_HERO %in% hero_def) %>%
ggplot(aes(x=RATING, fill=BEST_HERO)) +
geom_density(position = "fill") +
xlim(20, 80) +
ggtitle("Defence Heroes 1st Pick")
## Warning: Removed 7 rows containing non-finite values (stat_density).
Defence heroes are chosen evenly at the lower~middle tiers, but Torbjörn is mostly chosen in the lowest tiers, and gradually decreases. Also, Widowmaker takes nearly all the picks as rating goes up.
dat %>%
filter(BEST_HERO %in% hero_tank) %>%
ggplot(aes(x=RATING, fill=BEST_HERO)) +
geom_density(position = "fill") +
xlim(20, 80) +
ggtitle("Tank Heroes 1st Pick")
## Warning: Removed 35 rows containing non-finite values (stat_density).
Tank heroes are chosen evenly at the middle tiers, but D.Va is mostly chosen in the lowest tiers, and Zarya takes other hero’s picks as rating goes up.
dat %>%
filter(BEST_HERO %in% hero_heal) %>%
ggplot(aes(x=RATING, fill=BEST_HERO)) +
geom_density(position = "fill") +
xlim(20, 80) +
ggtitle("Support Heroes 1st Pick")
## Warning: Removed 21 rows containing non-finite values (stat_density).
Tank heroes are chosen very differently among tiers. Lúcio and Mercy is picked mostly at the lowest tier, and Symmetra has some share in the middle tier. But Ana and Zenyatta takes most of picks after rating 70.
dat %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))
) %>%
ggplot(aes(x=RATING, fill=BEST_HERO_CLASS)) +
geom_density(position = "fill") +
xlim(20, 80) +
ggtitle("Heroes 1st Pick")
## Warning: Removed 194 rows containing non-finite values (stat_density).
At the lower tiers, defence heroes are mostly chosen, but as rating goes up, offense heroes are more chosen. This could be because offense heroes are shown as more harder hero to play, but Support heroes are more easier.
dat %>%
filter(BEST_HERO %in% hero_atk) %>%
ggplot(aes(x=RATING, y=TOT_CARD / TOT_GAME, color=BEST_HERO)) +
geom_point(alpha=0.1) +
geom_line(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), stat="smooth", size = 1, alpha = 1) +
xlim(20, 80) +
ylim(0, 1) +
ggtitle("Which offense heroes get most cards?")
## Warning: Removed 131 rows containing non-finite values (stat_smooth).
## Warning: Removed 131 rows containing missing values (geom_point).
## Warning: Removed 32 rows containing missing values (geom_path).
dat %>%
filter(BEST_HERO %in% hero_def) %>%
ggplot(aes(x=RATING, y=TOT_CARD / TOT_GAME, color=BEST_HERO)) +
geom_point(alpha=0.1) +
geom_line(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), stat="smooth", size = 1, alpha = 1) +
xlim(20, 80) +
ylim(0, 1) +
ggtitle("Which defence heroes get most cards?")
## Warning: Removed 7 rows containing non-finite values (stat_smooth).
## Warning: Removed 7 rows containing missing values (geom_point).
## Warning: Removed 4 rows containing missing values (geom_path).
dat %>%
filter(BEST_HERO %in% hero_tank) %>%
ggplot(aes(x=RATING, y=TOT_CARD / TOT_GAME, color=BEST_HERO)) +
geom_point(alpha=0.1) +
geom_line(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), stat="smooth", size = 1, alpha = 1) +
xlim(20, 80) +
ylim(0, 1) +
ggtitle("Which tank heroes get most cards?")
## Warning: Removed 36 rows containing non-finite values (stat_smooth).
## Warning: Removed 36 rows containing missing values (geom_point).
## Warning: Removed 2 rows containing missing values (geom_path).
dat %>%
filter(BEST_HERO %in% hero_heal) %>%
ggplot(aes(x=RATING, y=TOT_CARD / TOT_GAME, color=BEST_HERO)) +
geom_point(alpha=0.1) +
geom_line(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), stat="smooth", size = 1, alpha = 1) +
xlim(20, 80) +
ylim(0, 1) +
ggtitle("Which support heroes get most cards?")
## Warning: Removed 21 rows containing non-finite values (stat_smooth).
## Warning: Removed 21 rows containing missing values (geom_point).
dat %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))
) %>%
ggplot(aes(x=RATING, y=TOT_CARD / TOT_GAME, color=BEST_HERO_CLASS)) +
geom_point(alpha=0.1) +
geom_line(method = "lm", formula = y ~ 0 + I(1/x) + I((x-1)/x), stat="smooth", size = 1, alpha = 1) +
xlim(20, 80) +
ylim(0, 1) +
ggtitle("Which hero classes get most cards?")
## Warning: Removed 195 rows containing non-finite values (stat_smooth).
## Warning: Removed 195 rows containing missing values (geom_point).
## Warning: Removed 8 rows containing missing values (geom_path).
Traits that can be calculated per game is chosen.
Kills, Heals, Damages, Solo kills, Objective kills, Final blows, Environmental kills, Multiple kills, Deaths, Environmental deaths, Fire time, Objective time, Heal assistance, Defence assistance, Attack assistance.
hero = "Genji"
dat_each <- dat %>%
filter(BEST_HERO == hero) %>%
transmute(KILL_PER_GAME,
HEAL_PER_GAME,
DMG_PER_GAME,
AVG_SOLO_KILL = TOT_SOLO_KILL / TOT_GAME,
AVG_OBJ_KILL = TOT_OBJ_KILL / TOT_GAME,
AVG_BLOW = TOT_BLOW / TOT_GAME,
AVG_ENV_KILL = TOT_ENV_KILL / TOT_GAME,
AVG_MUL_KILL = TOT_MUL_KILL / TOT_GAME,
AVG_DEATH = TOT_DEATH / TOT_GAME,
AVG_ENV_DEATH = TOT_ENV_DEATH / TOT_GAME,
AVG_FIRE_TIME = TOT_FIRE_TIME / TOT_GAME,
AVG_OBJ_TIME = TOT_OBJ_TIME / TOT_GAME,
AVG_HEAL_ASSIST = TOT_HEAL_ASSIST / TOT_GAME,
AVG_DEF_ASSIST = TOT_DEF_ASSIST / TOT_GAME,
AVG_ATK_ASSIST = TOT_ATK_ASSIST / TOT_GAME,
RATING)
hero_lm = lm(RATING ~ ., data = dat_each)
hero_lm %>%
ggplot(aes(.fitted, .resid)) +
geom_point() +
stat_smooth(method="loess") +
geom_hline(yintercept=0, col="red", linetype="dashed") +
xlab("Fitted values") +
ylab("Residuals") +
ggtitle(paste("Residual vs Fitted Plot of Linear Model of Hero", hero, sep = " "))
print(summary(hero_lm))
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -23.6509 -3.8760 -0.1672 4.0590 18.7348
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.875e+01 1.287e+00 22.330 < 2e-16 ***
## KILL_PER_GAME 2.027e+00 1.095e-01 18.507 < 2e-16 ***
## HEAL_PER_GAME -2.581e+01 4.635e+01 -0.557 0.577672
## DMG_PER_GAME 5.472e-04 1.633e-04 3.350 0.000823 ***
## AVG_SOLO_KILL -2.888e+00 2.161e-01 -13.364 < 2e-16 ***
## AVG_OBJ_KILL -2.649e+00 1.614e-01 -16.413 < 2e-16 ***
## AVG_BLOW -6.622e-02 1.839e-01 -0.360 0.718881
## AVG_ENV_KILL 3.276e+00 1.564e+00 2.095 0.036282 *
## AVG_MUL_KILL 1.228e+00 1.083e+00 1.134 0.257111
## AVG_DEATH -1.240e-03 9.534e-02 -0.013 0.989627
## AVG_ENV_DEATH -1.265e+00 1.401e+00 -0.903 0.366517
## AVG_FIRE_TIME 2.435e-02 6.287e-03 3.873 0.000111 ***
## AVG_OBJ_TIME 4.250e-02 1.404e-02 3.027 0.002499 **
## AVG_HEAL_ASSIST 2.581e+01 4.635e+01 0.557 0.577666
## AVG_DEF_ASSIST -1.401e-01 2.876e-01 -0.487 0.626187
## AVG_ATK_ASSIST 2.511e+00 4.187e-01 5.997 2.37e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.838 on 2027 degrees of freedom
## Multiple R-squared: 0.6446, Adjusted R-squared: 0.642
## F-statistic: 245.1 on 15 and 2027 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -22.7337 -4.1281 0.1543 4.4212 17.7049
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 24.0378141 2.2799333 10.543 < 2e-16 ***
## KILL_PER_GAME 2.2269388 0.1689437 13.182 < 2e-16 ***
## HEAL_PER_GAME -9.9926715 70.2149019 -0.142 0.886861
## DMG_PER_GAME 0.0007508 0.0002260 3.321 0.000929 ***
## AVG_SOLO_KILL -3.8312055 0.3332726 -11.496 < 2e-16 ***
## AVG_OBJ_KILL -3.2067640 0.2563248 -12.511 < 2e-16 ***
## AVG_BLOW 0.2114193 0.2886800 0.732 0.464124
## AVG_ENV_KILL -2.3162297 2.6130790 -0.886 0.375625
## AVG_MUL_KILL 0.6021693 1.7539054 0.343 0.731425
## AVG_DEATH 0.4015038 0.1525980 2.631 0.008647 **
## AVG_ENV_DEATH -1.4778253 2.3153192 -0.638 0.523443
## AVG_FIRE_TIME 0.0292410 0.0109472 2.671 0.007688 **
## AVG_OBJ_TIME 0.0616963 0.0265548 2.323 0.020368 *
## AVG_HEAL_ASSIST 9.9926128 70.2148926 0.142 0.886861
## AVG_DEF_ASSIST 0.5675624 0.4287650 1.324 0.185913
## AVG_ATK_ASSIST 1.2924148 0.5946495 2.173 0.029994 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.206 on 960 degrees of freedom
## Multiple R-squared: 0.704, Adjusted R-squared: 0.6993
## F-statistic: 152.2 on 15 and 960 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -19.4020 -3.5374 -0.1373 3.5748 17.7783
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.974e+01 7.723e-01 38.502 < 2e-16 ***
## KILL_PER_GAME 1.815e+00 6.328e-02 28.676 < 2e-16 ***
## HEAL_PER_GAME -1.843e+01 2.942e+01 -0.626 0.531070
## DMG_PER_GAME -5.678e-05 8.283e-05 -0.686 0.493045
## AVG_SOLO_KILL -2.100e+00 1.318e-01 -15.938 < 2e-16 ***
## AVG_OBJ_KILL -1.898e+00 9.247e-02 -20.529 < 2e-16 ***
## AVG_BLOW 5.957e-02 1.089e-01 0.547 0.584437
## AVG_ENV_KILL 8.542e-01 3.700e-01 2.308 0.021021 *
## AVG_MUL_KILL 2.123e+00 5.966e-01 3.559 0.000377 ***
## AVG_DEATH -1.307e-01 5.826e-02 -2.244 0.024893 *
## AVG_ENV_DEATH -3.018e+00 8.646e-01 -3.491 0.000486 ***
## AVG_FIRE_TIME 6.942e-03 3.911e-03 1.775 0.075938 .
## AVG_OBJ_TIME 6.295e-02 8.851e-03 7.112 1.32e-12 ***
## AVG_HEAL_ASSIST 1.843e+01 2.942e+01 0.626 0.531068
## AVG_DEF_ASSIST 4.834e-01 1.567e-01 3.085 0.002048 **
## AVG_ATK_ASSIST 1.363e+00 2.264e-01 6.019 1.89e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.472 on 4527 degrees of freedom
## Multiple R-squared: 0.5577, Adjusted R-squared: 0.5562
## F-statistic: 380.5 on 15 and 4527 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -26.1170 -3.6814 -0.0381 3.5470 22.0842
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.850e+01 1.025e+00 27.812 < 2e-16 ***
## KILL_PER_GAME 1.781e+00 8.392e-02 21.220 < 2e-16 ***
## HEAL_PER_GAME 1.829e+01 3.719e+01 0.492 0.622924
## DMG_PER_GAME 1.761e-04 1.173e-04 1.501 0.133481
## AVG_SOLO_KILL -2.192e+00 1.728e-01 -12.690 < 2e-16 ***
## AVG_OBJ_KILL -2.113e+00 1.197e-01 -17.649 < 2e-16 ***
## AVG_BLOW 9.344e-02 1.377e-01 0.678 0.497591
## AVG_ENV_KILL 2.634e+00 1.099e+00 2.397 0.016585 *
## AVG_MUL_KILL 9.674e-02 6.881e-01 0.141 0.888204
## AVG_DEATH 1.062e-02 7.627e-02 0.139 0.889256
## AVG_ENV_DEATH -3.677e+00 9.789e-01 -3.756 0.000176 ***
## AVG_FIRE_TIME 1.334e-02 5.002e-03 2.667 0.007695 **
## AVG_OBJ_TIME 6.796e-02 1.149e-02 5.916 3.67e-09 ***
## AVG_HEAL_ASSIST -1.829e+01 3.719e+01 -0.492 0.622922
## AVG_DEF_ASSIST 3.126e-01 2.020e-01 1.547 0.121969
## AVG_ATK_ASSIST 1.540e+00 3.340e-01 4.611 4.18e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.691 on 3042 degrees of freedom
## Multiple R-squared: 0.5118, Adjusted R-squared: 0.5094
## F-statistic: 212.6 on 15 and 3042 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -25.9769 -3.8894 0.0839 3.8463 18.8111
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.757e+01 8.532e-01 32.314 < 2e-16 ***
## KILL_PER_GAME 1.999e+00 6.876e-02 29.072 < 2e-16 ***
## HEAL_PER_GAME 1.805e+01 3.304e+01 0.546 0.585
## DMG_PER_GAME -4.283e-05 9.481e-05 -0.452 0.651
## AVG_SOLO_KILL -2.841e+00 1.722e-01 -16.499 < 2e-16 ***
## AVG_OBJ_KILL -2.273e+00 9.300e-02 -24.437 < 2e-16 ***
## AVG_BLOW 1.787e-01 1.250e-01 1.429 0.153
## AVG_ENV_KILL 2.064e-01 9.598e-01 0.215 0.830
## AVG_MUL_KILL 1.185e+00 7.441e-01 1.593 0.111
## AVG_DEATH -5.278e-02 6.509e-02 -0.811 0.417
## AVG_ENV_DEATH -3.783e+00 8.753e-01 -4.323 1.58e-05 ***
## AVG_FIRE_TIME 1.905e-02 4.126e-03 4.617 4.01e-06 ***
## AVG_OBJ_TIME 7.841e-02 9.277e-03 8.452 < 2e-16 ***
## AVG_HEAL_ASSIST -1.805e+01 3.304e+01 -0.546 0.585
## AVG_DEF_ASSIST 6.654e-01 1.627e-01 4.089 4.41e-05 ***
## AVG_ATK_ASSIST 1.394e+00 2.414e-01 5.776 8.16e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.986 on 4421 degrees of freedom
## Multiple R-squared: 0.5898, Adjusted R-squared: 0.5884
## F-statistic: 423.8 on 15 and 4421 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -21.4254 -3.8043 0.2109 3.8547 25.3734
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 28.2202006 1.2664240 22.283 < 2e-16 ***
## KILL_PER_GAME 1.6604121 0.1051579 15.790 < 2e-16 ***
## HEAL_PER_GAME -8.3332135 51.6315799 -0.161 0.871800
## DMG_PER_GAME 0.0008100 0.0001639 4.943 8.48e-07 ***
## AVG_SOLO_KILL -2.7670542 0.2346348 -11.793 < 2e-16 ***
## AVG_OBJ_KILL -2.5940443 0.1636807 -15.848 < 2e-16 ***
## AVG_BLOW 0.4164414 0.1927573 2.160 0.030881 *
## AVG_ENV_KILL -1.3153880 1.6798429 -0.783 0.433714
## AVG_MUL_KILL 0.0981775 1.2687168 0.077 0.938328
## AVG_DEATH -0.0398112 0.0988310 -0.403 0.687132
## AVG_ENV_DEATH -5.7079981 1.4971479 -3.813 0.000143 ***
## AVG_FIRE_TIME 0.0185097 0.0067808 2.730 0.006405 **
## AVG_OBJ_TIME 0.0747173 0.0150966 4.949 8.21e-07 ***
## AVG_HEAL_ASSIST 8.3332194 51.6315797 0.161 0.871800
## AVG_DEF_ASSIST 0.7024508 0.2548568 2.756 0.005911 **
## AVG_ATK_ASSIST 0.9883460 0.3773774 2.619 0.008899 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.759 on 1661 degrees of freedom
## Multiple R-squared: 0.6219, Adjusted R-squared: 0.6185
## F-statistic: 182.1 on 15 and 1661 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.4536 -3.6641 -0.0294 3.9232 13.9544
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.778e+01 3.791e+00 7.327 7.88e-12 ***
## KILL_PER_GAME 1.514e+00 3.342e-01 4.531 1.07e-05 ***
## HEAL_PER_GAME 2.396e+02 1.709e+02 1.402 0.16251
## DMG_PER_GAME 1.484e-04 4.349e-04 0.341 0.73330
## AVG_SOLO_KILL -2.736e+00 8.578e-01 -3.189 0.00169 **
## AVG_OBJ_KILL -1.101e+00 4.544e-01 -2.424 0.01635 *
## AVG_BLOW 8.504e-01 6.698e-01 1.270 0.20588
## AVG_ENV_KILL 1.618e+00 4.364e+00 0.371 0.71120
## AVG_MUL_KILL -5.416e+00 4.118e+00 -1.315 0.19010
## AVG_DEATH -9.052e-01 3.138e-01 -2.885 0.00440 **
## AVG_ENV_DEATH 2.410e+00 3.454e+00 0.698 0.48614
## AVG_FIRE_TIME 3.577e-03 2.306e-02 0.155 0.87690
## AVG_OBJ_TIME 8.044e-02 4.303e-02 1.869 0.06322 .
## AVG_HEAL_ASSIST -2.396e+02 1.709e+02 -1.402 0.16251
## AVG_DEF_ASSIST 1.990e+00 9.452e-01 2.106 0.03662 *
## AVG_ATK_ASSIST 2.154e-02 1.601e+00 0.013 0.98928
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.856 on 178 degrees of freedom
## Multiple R-squared: 0.5587, Adjusted R-squared: 0.5215
## F-statistic: 15.02 on 15 and 178 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -32.679 -3.697 0.029 3.465 21.522
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.140e+01 1.676e+00 18.737 < 2e-16 ***
## KILL_PER_GAME 1.889e+00 1.575e-01 11.996 < 2e-16 ***
## HEAL_PER_GAME 4.321e+01 7.164e+01 0.603 0.546561
## DMG_PER_GAME 1.052e-04 2.376e-04 0.443 0.657990
## AVG_SOLO_KILL -2.220e+00 3.568e-01 -6.221 7.80e-10 ***
## AVG_OBJ_KILL -1.963e+00 2.345e-01 -8.369 2.45e-16 ***
## AVG_BLOW 7.928e-02 2.811e-01 0.282 0.777950
## AVG_ENV_KILL -2.692e+00 1.543e+00 -1.745 0.081398 .
## AVG_MUL_KILL 1.249e-01 1.739e+00 0.072 0.942770
## AVG_DEATH -5.217e-01 1.464e-01 -3.563 0.000387 ***
## AVG_ENV_DEATH -3.621e+00 1.516e+00 -2.389 0.017129 *
## AVG_FIRE_TIME 1.569e-02 8.989e-03 1.745 0.081342 .
## AVG_OBJ_TIME 9.247e-02 2.297e-02 4.026 6.19e-05 ***
## AVG_HEAL_ASSIST -4.321e+01 7.164e+01 -0.603 0.546554
## AVG_DEF_ASSIST 1.456e+00 3.869e-01 3.764 0.000179 ***
## AVG_ATK_ASSIST -1.446e-01 6.660e-01 -0.217 0.828162
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.643 on 832 degrees of freedom
## Multiple R-squared: 0.5401, Adjusted R-squared: 0.5318
## F-statistic: 65.13 on 15 and 832 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -26.3723 -3.7835 0.1543 3.8583 19.1249
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.057e+01 1.041e+00 29.362 < 2e-16 ***
## KILL_PER_GAME 1.627e+00 9.680e-02 16.810 < 2e-16 ***
## HEAL_PER_GAME 3.448e+01 4.427e+01 0.779 0.436063
## DMG_PER_GAME 6.261e-04 1.196e-04 5.237 1.78e-07 ***
## AVG_SOLO_KILL -1.840e+00 2.572e-01 -7.154 1.12e-12 ***
## AVG_OBJ_KILL -1.741e+00 1.375e-01 -12.662 < 2e-16 ***
## AVG_BLOW -1.611e-01 1.809e-01 -0.890 0.373350
## AVG_ENV_KILL -1.356e+00 1.137e+00 -1.192 0.233483
## AVG_MUL_KILL 2.333e+00 1.215e+00 1.919 0.055067 .
## AVG_DEATH -4.324e-01 8.474e-02 -5.103 3.61e-07 ***
## AVG_ENV_DEATH -3.755e+00 1.040e+00 -3.609 0.000313 ***
## AVG_FIRE_TIME 2.522e-02 6.478e-03 3.892 0.000102 ***
## AVG_OBJ_TIME 6.255e-02 1.193e-02 5.242 1.73e-07 ***
## AVG_HEAL_ASSIST -3.448e+01 4.427e+01 -0.779 0.436052
## AVG_DEF_ASSIST 8.572e-01 2.009e-01 4.267 2.06e-05 ***
## AVG_ATK_ASSIST 1.126e+00 3.307e-01 3.404 0.000675 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.818 on 2374 degrees of freedom
## Multiple R-squared: 0.427, Adjusted R-squared: 0.4234
## F-statistic: 117.9 on 15 and 2374 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -27.0290 -3.4278 0.0959 3.9403 19.1027
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.578e+01 2.097e+00 12.295 < 2e-16 ***
## KILL_PER_GAME 1.998e+00 1.884e-01 10.608 < 2e-16 ***
## HEAL_PER_GAME -5.268e+01 9.238e+01 -0.570 0.56876
## DMG_PER_GAME 3.709e-04 2.981e-04 1.244 0.21403
## AVG_SOLO_KILL -3.317e+00 5.674e-01 -5.846 8.65e-09 ***
## AVG_OBJ_KILL -1.903e+00 2.714e-01 -7.014 6.83e-12 ***
## AVG_BLOW 1.870e-01 3.905e-01 0.479 0.63216
## AVG_ENV_KILL 2.324e+00 2.283e+00 1.018 0.30912
## AVG_MUL_KILL 4.060e+00 2.375e+00 1.709 0.08797 .
## AVG_DEATH -3.686e-01 1.775e-01 -2.076 0.03833 *
## AVG_ENV_DEATH -3.013e+00 2.173e+00 -1.387 0.16615
## AVG_FIRE_TIME 1.046e-02 1.286e-02 0.814 0.41616
## AVG_OBJ_TIME 6.893e-02 2.208e-02 3.122 0.00189 **
## AVG_HEAL_ASSIST 5.268e+01 9.238e+01 0.570 0.56876
## AVG_DEF_ASSIST 1.995e-01 4.840e-01 0.412 0.68029
## AVG_ATK_ASSIST 2.068e+00 7.603e-01 2.720 0.00674 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.986 on 549 degrees of freedom
## Multiple R-squared: 0.5359, Adjusted R-squared: 0.5232
## F-statistic: 42.26 on 15 and 549 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -28.7913 -3.8779 0.4034 4.2498 19.7562
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.220e+01 2.783e+00 11.570 < 2e-16 ***
## KILL_PER_GAME 2.728e-01 2.311e-01 1.180 0.23868
## HEAL_PER_GAME -5.485e+01 1.411e+02 -0.389 0.69779
## DMG_PER_GAME 2.372e-04 3.085e-04 0.769 0.44253
## AVG_SOLO_KILL -3.769e+00 7.291e-01 -5.169 4.13e-07 ***
## AVG_OBJ_KILL 4.312e-01 3.603e-01 1.197 0.23227
## AVG_BLOW 1.072e+00 3.865e-01 2.773 0.00588 **
## AVG_ENV_KILL 7.647e-01 3.362e+00 0.227 0.82020
## AVG_MUL_KILL 8.699e+00 3.525e+00 2.468 0.01411 *
## AVG_DEATH -2.861e-02 2.720e-01 -0.105 0.91632
## AVG_ENV_DEATH -1.530e+00 3.477e+00 -0.440 0.66022
## AVG_FIRE_TIME 5.400e-02 1.510e-02 3.577 0.00040 ***
## AVG_OBJ_TIME -1.909e-02 3.119e-02 -0.612 0.54101
## AVG_HEAL_ASSIST 5.485e+01 1.411e+02 0.389 0.69779
## AVG_DEF_ASSIST 8.117e-01 6.509e-01 1.247 0.21325
## AVG_ATK_ASSIST 1.544e+00 9.516e-01 1.623 0.10563
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.647 on 323 degrees of freedom
## Multiple R-squared: 0.4373, Adjusted R-squared: 0.4112
## F-statistic: 16.74 on 15 and 323 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.4695 -3.9962 0.0602 3.8833 16.9222
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.784e+01 2.474e+00 11.255 < 2e-16 ***
## KILL_PER_GAME 1.953e+00 2.593e-01 7.533 3.43e-13 ***
## HEAL_PER_GAME -6.658e+01 1.147e+02 -0.581 0.562
## DMG_PER_GAME 3.666e-04 3.611e-04 1.015 0.311
## AVG_SOLO_KILL -2.096e+00 4.644e-01 -4.514 8.39e-06 ***
## AVG_OBJ_KILL -2.161e+00 3.845e-01 -5.621 3.59e-08 ***
## AVG_BLOW 2.129e-02 4.105e-01 0.052 0.959
## AVG_ENV_KILL -1.994e+00 2.633e+00 -0.757 0.449
## AVG_MUL_KILL 2.935e+00 2.864e+00 1.025 0.306
## AVG_DEATH 5.437e-02 2.128e-01 0.256 0.798
## AVG_ENV_DEATH -3.262e+00 2.948e+00 -1.107 0.269
## AVG_FIRE_TIME 9.575e-03 1.447e-02 0.662 0.509
## AVG_OBJ_TIME 1.047e-02 3.636e-02 0.288 0.773
## AVG_HEAL_ASSIST 6.658e+01 1.147e+02 0.581 0.562
## AVG_DEF_ASSIST 1.190e+00 7.512e-01 1.584 0.114
## AVG_ATK_ASSIST 1.218e+00 1.033e+00 1.179 0.239
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.205 on 394 degrees of freedom
## Multiple R-squared: 0.5626, Adjusted R-squared: 0.5459
## F-statistic: 33.78 on 15 and 394 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -23.8525 -4.0107 0.0457 4.0334 24.2245
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.423e+01 1.629e+00 14.877 < 2e-16 ***
## KILL_PER_GAME 1.437e+00 1.388e-01 10.350 < 2e-16 ***
## HEAL_PER_GAME -4.145e+01 6.617e+01 -0.626 0.53112
## DMG_PER_GAME 2.067e-04 2.318e-04 0.892 0.37263
## AVG_SOLO_KILL -4.637e+00 4.513e-01 -10.275 < 2e-16 ***
## AVG_OBJ_KILL -1.564e+00 1.964e-01 -7.962 3.86e-15 ***
## AVG_BLOW 1.226e+00 2.662e-01 4.603 4.60e-06 ***
## AVG_ENV_KILL 5.379e+00 1.649e+00 3.262 0.00114 **
## AVG_MUL_KILL 3.607e+00 1.972e+00 1.828 0.06772 .
## AVG_DEATH 2.490e-02 1.260e-01 0.198 0.84343
## AVG_ENV_DEATH -4.225e+00 1.704e+00 -2.480 0.01326 *
## AVG_FIRE_TIME 3.062e-02 9.901e-03 3.093 0.00203 **
## AVG_OBJ_TIME 3.124e-02 1.297e-02 2.408 0.01619 *
## AVG_HEAL_ASSIST 4.145e+01 6.617e+01 0.626 0.53112
## AVG_DEF_ASSIST 3.433e-01 3.121e-01 1.100 0.27156
## AVG_ATK_ASSIST 2.069e+00 4.859e-01 4.257 2.23e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.39 on 1209 degrees of freedom
## Multiple R-squared: 0.5418, Adjusted R-squared: 0.5361
## F-statistic: 95.3 on 15 and 1209 DF, p-value: < 2.2e-16
AVG_ATK_ASSIST
AVG_OBJ_KILL
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -26.5010 -3.5785 -0.0244 3.5932 27.1710
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 34.2154191 0.8682867 39.406 < 2e-16 ***
## KILL_PER_GAME 1.8860165 0.0842301 22.391 < 2e-16 ***
## HEAL_PER_GAME -9.6637222 35.1036534 -0.275 0.78311
## DMG_PER_GAME 0.0001056 0.0001247 0.847 0.39726
## AVG_SOLO_KILL -3.2929002 0.2211421 -14.890 < 2e-16 ***
## AVG_OBJ_KILL -1.8693420 0.1169647 -15.982 < 2e-16 ***
## AVG_BLOW -0.0889245 0.1408137 -0.632 0.52775
## AVG_ENV_KILL 0.8112489 0.8327228 0.974 0.33002
## AVG_MUL_KILL 2.5353197 0.8339189 3.040 0.00238 **
## AVG_DEATH -0.4448348 0.0710431 -6.261 4.26e-10 ***
## AVG_ENV_DEATH -1.0588796 0.7148474 -1.481 0.13862
## AVG_FIRE_TIME 0.0304425 0.0046196 6.590 5.04e-11 ***
## AVG_OBJ_TIME 0.0488471 0.0080982 6.032 1.78e-09 ***
## AVG_HEAL_ASSIST 9.6628998 35.1036532 0.275 0.78313
## AVG_DEF_ASSIST 0.7544764 0.1632775 4.621 3.96e-06 ***
## AVG_ATK_ASSIST 1.0116307 0.2400638 4.214 2.57e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.701 on 3604 degrees of freedom
## Multiple R-squared: 0.5153, Adjusted R-squared: 0.5133
## F-statistic: 255.4 on 15 and 3604 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -21.0271 -3.8302 -0.0362 3.6573 23.0693
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.732e+01 1.089e+00 25.092 < 2e-16 ***
## KILL_PER_GAME 2.000e+00 8.801e-02 22.723 < 2e-16 ***
## HEAL_PER_GAME 7.267e+01 3.803e+01 1.911 0.056107 .
## DMG_PER_GAME 1.057e-04 1.141e-04 0.926 0.354380
## AVG_SOLO_KILL -2.404e+00 1.997e-01 -12.039 < 2e-16 ***
## AVG_OBJ_KILL -2.300e+00 1.270e-01 -18.119 < 2e-16 ***
## AVG_BLOW -1.218e-02 1.391e-01 -0.088 0.930235
## AVG_ENV_KILL -2.851e+00 9.570e-01 -2.979 0.002916 **
## AVG_MUL_KILL 4.446e+00 1.004e+00 4.428 9.85e-06 ***
## AVG_DEATH -5.144e-02 7.952e-02 -0.647 0.517725
## AVG_ENV_DEATH -3.097e+00 8.564e-01 -3.617 0.000303 ***
## AVG_FIRE_TIME 1.400e-02 4.614e-03 3.034 0.002434 **
## AVG_OBJ_TIME 8.092e-02 1.132e-02 7.149 1.09e-12 ***
## AVG_HEAL_ASSIST -7.267e+01 3.803e+01 -1.911 0.056105 .
## AVG_DEF_ASSIST 9.518e-01 1.595e-01 5.969 2.67e-09 ***
## AVG_ATK_ASSIST 9.532e-01 2.836e-01 3.361 0.000786 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.786 on 3056 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.5394, Adjusted R-squared: 0.5371
## F-statistic: 238.6 on 15 and 3056 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -17.6975 -3.4468 -0.1502 3.3839 19.3258
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.284e+01 2.317e+00 14.172 < 2e-16 ***
## KILL_PER_GAME 1.699e+00 1.719e-01 9.882 < 2e-16 ***
## HEAL_PER_GAME 4.388e+01 9.367e+01 0.468 0.63968
## DMG_PER_GAME 3.819e-04 3.276e-04 1.166 0.24432
## AVG_SOLO_KILL -1.140e+00 6.018e-01 -1.895 0.05878 .
## AVG_OBJ_KILL -1.767e+00 3.093e-01 -5.714 2e-08 ***
## AVG_BLOW -7.050e-01 3.687e-01 -1.912 0.05649 .
## AVG_ENV_KILL 1.006e+00 1.644e+00 0.612 0.54107
## AVG_MUL_KILL 2.454e+00 2.514e+00 0.976 0.32939
## AVG_DEATH -4.595e-01 1.793e-01 -2.563 0.01070 *
## AVG_ENV_DEATH -4.683e+00 2.109e+00 -2.220 0.02689 *
## AVG_FIRE_TIME 3.287e-02 1.259e-02 2.612 0.00931 **
## AVG_OBJ_TIME 6.546e-02 2.574e-02 2.543 0.01132 *
## AVG_HEAL_ASSIST -4.388e+01 9.367e+01 -0.468 0.63968
## AVG_DEF_ASSIST -1.388e-01 4.338e-01 -0.320 0.74924
## AVG_ATK_ASSIST 1.580e+00 6.018e-01 2.625 0.00896 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.41 on 453 degrees of freedom
## Multiple R-squared: 0.5228, Adjusted R-squared: 0.507
## F-statistic: 33.09 on 15 and 453 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -21.3278 -3.8780 -0.0658 3.7484 20.6259
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 31.8772056 0.9771032 32.624 < 2e-16 ***
## KILL_PER_GAME 1.6910620 0.0761730 22.200 < 2e-16 ***
## HEAL_PER_GAME 9.9762921 36.0730488 0.277 0.782135
## DMG_PER_GAME 0.0003101 0.0001156 2.682 0.007356 **
## AVG_SOLO_KILL -3.8564416 0.2438406 -15.815 < 2e-16 ***
## AVG_OBJ_KILL -2.0531091 0.1099082 -18.680 < 2e-16 ***
## AVG_BLOW 0.5246784 0.1437593 3.650 0.000266 ***
## AVG_ENV_KILL -0.6090170 1.0065786 -0.605 0.545193
## AVG_MUL_KILL -0.9260956 0.7130156 -1.299 0.194081
## AVG_DEATH -0.1403137 0.0761163 -1.843 0.065351 .
## AVG_ENV_DEATH -3.2682107 0.9272901 -3.524 0.000430 ***
## AVG_FIRE_TIME 0.0272562 0.0049926 5.459 5.10e-08 ***
## AVG_OBJ_TIME 0.0401874 0.0096648 4.158 3.28e-05 ***
## AVG_HEAL_ASSIST -9.9766039 36.0730489 -0.277 0.782129
## AVG_DEF_ASSIST 0.6661185 0.1695365 3.929 8.69e-05 ***
## AVG_ATK_ASSIST 1.2459405 0.2532035 4.921 9.01e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.916 on 3612 degrees of freedom
## Multiple R-squared: 0.5388, Adjusted R-squared: 0.5369
## F-statistic: 281.3 on 15 and 3612 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -13.1705 -4.0035 -0.5302 2.7881 17.5385
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.898e+01 6.460e+00 2.938 0.00427 **
## KILL_PER_GAME 1.343e+00 7.964e-01 1.686 0.09556 .
## HEAL_PER_GAME 3.270e+02 2.385e+02 1.371 0.17410
## DMG_PER_GAME 9.182e-04 9.536e-04 0.963 0.33841
## AVG_SOLO_KILL -5.543e+00 1.914e+00 -2.896 0.00483 **
## AVG_OBJ_KILL -2.269e+00 1.141e+00 -1.989 0.05002 .
## AVG_BLOW 2.323e+00 1.367e+00 1.699 0.09311 .
## AVG_ENV_KILL -1.966e+00 8.626e+00 -0.228 0.82023
## AVG_MUL_KILL 9.485e+00 7.645e+00 1.241 0.21825
## AVG_DEATH -7.057e-01 5.308e-01 -1.330 0.18732
## AVG_ENV_DEATH -4.673e+00 6.095e+00 -0.767 0.44544
## AVG_FIRE_TIME -1.378e-02 3.654e-02 -0.377 0.70709
## AVG_OBJ_TIME 1.487e-01 7.713e-02 1.928 0.05726 .
## AVG_HEAL_ASSIST -3.270e+02 2.385e+02 -1.371 0.17410
## AVG_DEF_ASSIST 2.308e-01 6.962e-01 0.332 0.74108
## AVG_ATK_ASSIST 3.936e+00 8.323e-01 4.729 9.12e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.954 on 83 degrees of freedom
## Multiple R-squared: 0.7636, Adjusted R-squared: 0.7208
## F-statistic: 17.87 on 15 and 83 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -24.1800 -3.6643 0.0166 3.5596 22.0515
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.198e+01 7.436e-01 43.001 < 2e-16 ***
## KILL_PER_GAME 1.454e+00 7.255e-02 20.041 < 2e-16 ***
## HEAL_PER_GAME -2.929e+01 2.884e+01 -1.016 0.30984
## DMG_PER_GAME 3.576e-04 1.129e-04 3.168 0.00154 **
## AVG_SOLO_KILL -3.808e+00 2.505e-01 -15.204 < 2e-16 ***
## AVG_OBJ_KILL -1.757e+00 1.052e-01 -16.705 < 2e-16 ***
## AVG_BLOW 8.342e-01 1.322e-01 6.310 3.01e-10 ***
## AVG_ENV_KILL -1.431e+00 5.060e-01 -2.828 0.00470 **
## AVG_MUL_KILL 5.919e+00 9.505e-01 6.228 5.10e-10 ***
## AVG_DEATH -6.908e-01 5.907e-02 -11.695 < 2e-16 ***
## AVG_ENV_DEATH -1.324e+00 7.082e-01 -1.870 0.06160 .
## AVG_FIRE_TIME 1.197e-02 2.867e-03 4.177 3.00e-05 ***
## AVG_OBJ_TIME 6.344e-02 6.407e-03 9.903 < 2e-16 ***
## AVG_HEAL_ASSIST 2.929e+01 2.884e+01 1.016 0.30984
## AVG_DEF_ASSIST 8.629e-01 6.885e-02 12.533 < 2e-16 ***
## AVG_ATK_ASSIST 1.191e+00 9.513e-02 12.523 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.755 on 5274 degrees of freedom
## Multiple R-squared: 0.5147, Adjusted R-squared: 0.5133
## F-statistic: 372.9 on 15 and 5274 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -36.459 -3.700 -0.082 3.633 23.447
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.369e+01 8.280e-01 40.688 < 2e-16 ***
## KILL_PER_GAME 2.195e+00 9.043e-02 24.269 < 2e-16 ***
## HEAL_PER_GAME 7.679e+00 3.157e+01 0.243 0.80784
## DMG_PER_GAME 6.049e-05 1.473e-04 0.411 0.68137
## AVG_SOLO_KILL -4.037e+00 3.115e-01 -12.958 < 2e-16 ***
## AVG_OBJ_KILL -2.517e+00 1.462e-01 -17.215 < 2e-16 ***
## AVG_BLOW 3.128e-01 1.664e-01 1.880 0.06021 .
## AVG_ENV_KILL 1.414e+00 7.822e-01 1.807 0.07077 .
## AVG_MUL_KILL 5.916e+00 1.132e+00 5.226 1.81e-07 ***
## AVG_DEATH -7.540e-01 6.985e-02 -10.795 < 2e-16 ***
## AVG_ENV_DEATH -2.472e+00 8.959e-01 -2.759 0.00582 **
## AVG_FIRE_TIME 1.614e-02 3.228e-03 4.998 6.02e-07 ***
## AVG_OBJ_TIME 3.925e-02 8.937e-03 4.392 1.15e-05 ***
## AVG_HEAL_ASSIST -7.679e+00 3.157e+01 -0.243 0.80784
## AVG_DEF_ASSIST 8.079e-01 4.804e-02 16.817 < 2e-16 ***
## AVG_ATK_ASSIST 5.836e-01 4.140e-02 14.097 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.752 on 4338 degrees of freedom
## Multiple R-squared: 0.5203, Adjusted R-squared: 0.5186
## F-statistic: 313.7 on 15 and 4338 DF, p-value: < 2.2e-16
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -20.7636 -2.9831 0.2313 2.8918 17.6192
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.917e+01 4.094e+00 9.569 < 2e-16 ***
## KILL_PER_GAME 8.113e-01 3.629e-01 2.236 0.02698 *
## HEAL_PER_GAME 9.575e+01 1.747e+02 0.548 0.58455
## DMG_PER_GAME 2.596e-04 6.760e-04 0.384 0.70157
## AVG_SOLO_KILL -4.895e+00 1.208e+00 -4.051 8.46e-05 ***
## AVG_OBJ_KILL -1.792e+00 6.617e-01 -2.709 0.00760 **
## AVG_BLOW 1.834e+00 7.824e-01 2.344 0.02050 *
## AVG_ENV_KILL -3.652e+00 4.745e+00 -0.770 0.44291
## AVG_MUL_KILL 1.604e+01 5.578e+00 2.877 0.00466 **
## AVG_DEATH -2.448e-01 3.378e-01 -0.725 0.46985
## AVG_ENV_DEATH -7.929e+00 4.317e+00 -1.836 0.06844 .
## AVG_FIRE_TIME 2.739e-02 2.438e-02 1.123 0.26325
## AVG_OBJ_TIME 4.996e-02 4.951e-02 1.009 0.31468
## AVG_HEAL_ASSIST -9.575e+01 1.747e+02 -0.548 0.58456
## AVG_DEF_ASSIST -1.274e+00 9.348e-01 -1.362 0.17529
## AVG_ATK_ASSIST 1.351e+00 1.235e+00 1.094 0.27600
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.851 on 138 degrees of freedom
## Multiple R-squared: 0.3854, Adjusted R-squared: 0.3186
## F-statistic: 5.769 on 15 and 138 DF, p-value: 4.148e-09
##
## Call:
## lm(formula = RATING ~ ., data = dat_each)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.6835 -4.0959 -0.4539 3.8591 20.8524
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.807e+01 3.097e+00 9.065 < 2e-16 ***
## KILL_PER_GAME 1.659e+00 2.823e-01 5.877 8.58e-09 ***
## HEAL_PER_GAME -4.132e+01 1.178e+02 -0.351 0.72597
## DMG_PER_GAME 6.856e-04 4.148e-04 1.653 0.09909 .
## AVG_SOLO_KILL -4.286e+00 8.728e-01 -4.911 1.31e-06 ***
## AVG_OBJ_KILL -3.045e+00 4.059e-01 -7.501 3.90e-13 ***
## AVG_BLOW 1.164e+00 5.141e-01 2.264 0.02408 *
## AVG_ENV_KILL 3.620e+00 2.680e+00 1.351 0.17747
## AVG_MUL_KILL 1.881e+01 3.814e+00 4.933 1.18e-06 ***
## AVG_DEATH -7.737e-01 2.505e-01 -3.088 0.00215 **
## AVG_ENV_DEATH 8.968e-02 3.127e+00 0.029 0.97713
## AVG_FIRE_TIME -1.448e-02 1.151e-02 -1.258 0.20908
## AVG_OBJ_TIME 1.284e-01 3.142e-02 4.087 5.24e-05 ***
## AVG_HEAL_ASSIST 4.133e+01 1.178e+02 0.351 0.72597
## AVG_DEF_ASSIST 1.398e-01 3.164e-01 0.442 0.65886
## AVG_ATK_ASSIST 1.884e+00 4.312e-01 4.369 1.58e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 6.439 on 414 degrees of freedom
## Multiple R-squared: 0.5954, Adjusted R-squared: 0.5807
## F-statistic: 40.61 on 15 and 414 DF, p-value: < 2.2e-16
Gather up meaningful coefficients per game. These stats does meaningful amount of difference into play ratings.
hero_coef_df <- data.frame()
for (hero in c(hero_atk, hero_def, hero_tank, hero_heal)) {
dat_each <- dat %>%
filter(BEST_HERO == hero) %>%
transmute(KILL_PER_GAME,
HEAL_PER_GAME,
DMG_PER_GAME,
AVG_SOLO_KILL = TOT_SOLO_KILL / TOT_GAME,
AVG_OBJ_KILL = TOT_OBJ_KILL / TOT_GAME,
AVG_BLOW = TOT_BLOW / TOT_GAME,
AVG_ENV_KILL = TOT_ENV_KILL / TOT_GAME,
AVG_MUL_KILL = TOT_MUL_KILL / TOT_GAME,
AVG_DEATH = TOT_DEATH / TOT_GAME,
AVG_ENV_DEATH = TOT_ENV_DEATH / TOT_GAME,
AVG_FIRE_TIME = TOT_FIRE_TIME / TOT_GAME,
AVG_OBJ_TIME = TOT_OBJ_TIME / TOT_GAME,
AVG_HEAL_ASSIST = TOT_HEAL_ASSIST / TOT_GAME,
AVG_DEF_ASSIST = TOT_DEF_ASSIST / TOT_GAME,
AVG_ATK_ASSIST = TOT_ATK_ASSIST / TOT_GAME,
RATING)
hero_lm = lm(RATING ~ ., data = dat_each)
df_name <- data.frame(names(coef(hero_lm)))
coef_df <- data.frame(coef(summary(hero_lm)))
for(i in 2:length(coef(hero_lm))) {
if(coef_df[4][i,] < 0.01) {
hero_coef_df[hero, toString(df_name[i,])] = coef_df[1][i,]
}
}
hero_coef_df[hero, "BEST_HERO"] = hero
}
hero_coef_df %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
subset(!is.na(KILL_PER_GAME)) %>%
ggplot(aes(x=reorder(BEST_HERO, KILL_PER_GAME), y=KILL_PER_GAME, fill=BEST_HERO_CLASS)) +
ggtitle('Rating Increasement per Kill') +
geom_bar(stat='identity') +
coord_flip() +
xlab("Hero Chosen") +
ylab("Coefficient")
Naturally, support and tank heroes has a relatively low impact on kills, but Mercy has a large amount of increasement; stating Mercy’s Caduceus blaster can be very lethal and used effectively when dealing. But mostly, Kills does help for rating to go up.
Damages are more for low-dealing offense heroes, like Tracer, McCree or Genji. Moreover, Lúcio and Zarya should deal more for higher rating; even they are not defence or offense heroes. Lúcio should cope with slow bullet speed of Sonic Amplifier, and Zarya too should cope with Particle Cannon explosive charges.
## Warning: Stacking not well defined when ymin != 0
Solo kills normally means hero has encountered one-to-one situation, and the hero got some blows from the opponent. Health packs are a rarity. So it has a negative impact on ratings. Support heroes suffers the most, whereas long distance Defense heroes or short distance offense heroes suffers lesser.
## Warning: Stacking not well defined when ymin != 0
Also, Objective Kills are earned when objectives are in danger, so it has a negative impact on ratings too. Offense heroes should not be in the objective, but in the front line, so Offense heroes suffer the most, and Tank heroes suffers more less.
hero_coef_df %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
subset(!is.na(AVG_BLOW)) %>%
ggplot(aes(x=reorder(BEST_HERO, AVG_BLOW), y=AVG_BLOW, fill=BEST_HERO_CLASS)) +
ggtitle('Rating Increasement per Death Blows') +
geom_bar(stat='identity') +
coord_flip() +
xlab("Hero Chosen") +
ylab("Coefficient")
hero_coef_df %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
subset(!is.na(AVG_ENV_KILL)) %>%
ggplot(aes(x=reorder(BEST_HERO, AVG_ENV_KILL), y=AVG_ENV_KILL, fill=BEST_HERO_CLASS)) +
ggtitle('Rating Increasement per Environmental Kill') +
geom_bar(stat='identity') +
coord_flip() +
xlab("Hero Chosen") +
ylab("Coefficient")
## Warning: Stacking not well defined when ymin != 0
This shows that Environmental Kills by D.Va, using Boosters can be very helpful, but Roadhog’s Chain Hooks or Lúcio’s Sonic Amplifier can be not useful in many maps with some exceptions, like Illios.
hero_coef_df %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
subset(!is.na(AVG_MUL_KILL)) %>%
ggplot(aes(x=reorder(BEST_HERO, AVG_MUL_KILL), y=AVG_MUL_KILL, fill=BEST_HERO_CLASS)) +
ggtitle('Rating Increasement per Multi Kill') +
geom_bar(stat='identity') +
coord_flip() +
xlab("Hero Chosen") +
ylab("Coefficient")
Except lower three heroes, four Support heroes do not have any wide-ranged deals. This can be showing the significance of basic weapons that they have.
hero_coef_df %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
subset(!is.na(AVG_DEATH)) %>%
ggplot(aes(x=reorder(BEST_HERO, AVG_DEATH), y=AVG_DEATH, fill=BEST_HERO_CLASS)) +
ggtitle('Rating Increasement per Death') +
geom_bar(stat='identity') +
coord_flip() +
xlab("Hero Chosen") +
ylab("Coefficient")
## Warning: Stacking not well defined when ymin != 0
Except from McCree, as discussed above, Deaths have a negative impacts on slow heroes or healing heroes. It is because of slow battle-joining speed, discussed multiple times above.
hero_coef_df %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
subset(!is.na(AVG_ENV_DEATH)) %>%
ggplot(aes(x=reorder(BEST_HERO, AVG_ENV_DEATH), y=AVG_ENV_DEATH, fill=BEST_HERO_CLASS)) +
ggtitle('Rating Increasement per Environmental Death') +
geom_bar(stat='identity') +
coord_flip() +
xlab("Hero Chosen") +
ylab("Coefficient")
## Warning: Stacking not well defined when ymin != 0
Environmental Deaths have a negative blow on heroes that have to place themselves strategically, like Roadhog or Junkrat, or have high mobility, like Mercy or Tracer. These heroes especially need extensive map understanding.
hero_coef_df %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
subset(!is.na(AVG_FIRE_TIME)) %>%
ggplot(aes(x=reorder(BEST_HERO, AVG_FIRE_TIME), y=AVG_FIRE_TIME, fill=BEST_HERO_CLASS)) +
ggtitle('Rating Increasement per Fire Time (sec)') +
geom_bar(stat='identity') +
coord_flip() +
xlab("Hero Chosen") +
ylab("Coefficient")
Blizzard’s Fire Time system can be too Tank-oriented; as they increase a lot by same fire time.
hero_coef_df %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
subset(!is.na(AVG_OBJ_TIME)) %>%
ggplot(aes(x=reorder(BEST_HERO, AVG_OBJ_TIME), y=AVG_OBJ_TIME, fill=BEST_HERO_CLASS)) +
ggtitle('Rating Increasement per Objective Time (sec)') +
geom_bar(stat='identity') +
coord_flip() +
xlab("Hero Chosen") +
ylab("Coefficient")
Offense heroes, especially Tracer, Genji, and Hanzo have to contribute on the objective itself. Also Soldier: 76 or Pharah & Mercy Objective Team can be great for winning.
hero_coef_df %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
subset(!is.na(AVG_DEF_ASSIST)) %>%
ggplot(aes(x=reorder(BEST_HERO, AVG_DEF_ASSIST), y=AVG_DEF_ASSIST, fill=BEST_HERO_CLASS)) +
ggtitle('Rating Increasement per Defensive Assists') +
geom_bar(stat='identity') +
coord_flip() +
xlab("Hero Chosen") +
ylab("Coefficient")
hero_coef_df %>%
mutate(BEST_HERO_CLASS =
ifelse(BEST_HERO %in% hero_atk, "Offense",
ifelse(BEST_HERO %in% hero_def, "Defence",
ifelse(BEST_HERO %in% hero_tank, "Tank", "Support")))) %>%
subset(!is.na(AVG_ATK_ASSIST)) %>%
ggplot(aes(x=reorder(BEST_HERO, AVG_ATK_ASSIST), y=AVG_ATK_ASSIST, fill=BEST_HERO_CLASS)) +
ggtitle('Rating Increasement per Offensive Assists') +
geom_bar(stat='identity') +
coord_flip() +
xlab("Hero Chosen") +
ylab("Coefficient")